{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 3 数据类型（一）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.字符串循环左移"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "给定一个字符串S，要求把S的前k个字符移动到S的尾部，如把字符串“abcdef”前面的2个字符‘a’、‘b’移动到字符串的尾部，得到新字符串“cdefab”，称作字符串循环左移k位。\n",
    "\n",
    "输入一个字符串和一个非负整数N，要求将字符串循环左移N次。\n",
    "\n",
    "可以使用`s=str(input())`语句实现字符串s的输入：\n",
    "\n",
    "可以使用`n=int(input())`语句实现非负整数n的输入：\n",
    "\n",
    "---\n",
    "\n",
    "**输入格式:**\n",
    "\n",
    "输入在第1行中给出一个不超过100个字符长度的、以回车结束的非空字符串；第2行给出非负整数N。\n",
    "\n",
    "**输出格式：**\n",
    "\n",
    "在一行中输出循环左移N次后的字符串。\n",
    "\n",
    "---\n",
    "\n",
    "**输入样例：**\n",
    "\n",
    "```shell\n",
    "abcd\n",
    "2\n",
    "```\n",
    "\n",
    "**输出样例：**\n",
    "\n",
    "```shell\n",
    "cdab\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdin",
     "output_type": "stream",
     "text": [
      "S =  123456\n",
      "N =  7\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "234561\n"
     ]
    }
   ],
   "source": [
    "s = str(input())\n",
    "n = int(input())\n",
    "length = len(s)\n",
    "n = int(n % length)   # 左移次数超过字符串长度\n",
    "s_prev = s[0:n]\n",
    "s_next = s[n:length]\n",
    "s_new = s_next + s_prev\n",
    "print(s_new)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<br>\n",
    "\n",
    "## 2.斜边上的高"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "输入直角三角形两直角边a,b的值，输出斜边上的高\n",
    "\n",
    "可以使用`a=int(input())`语句实现非负整数a的输入：\n",
    "\n",
    "可以使用`round(x,2)`函数四舍五入保留2位小数\n",
    "\n",
    "---\n",
    "\n",
    "**输入格式:**\n",
    "\n",
    "2行，每行一个整数，分别为a，b的值\n",
    "\n",
    "**输出格式：**\n",
    "\n",
    "一个数，即斜边上的高，保留2位小数\n",
    "\n",
    "---\n",
    "\n",
    "**输入样例：**\n",
    "\n",
    "```shell\n",
    "4\n",
    "5\n",
    "```\n",
    "\n",
    "**输出样例：**\n",
    "\n",
    "```shell\n",
    "3.12\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdin",
     "output_type": "stream",
     "text": [
      "直角边a =  3\n",
      "直角边b =  4\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2.4\n"
     ]
    }
   ],
   "source": [
    "import math\n",
    "\n",
    "a = int(input())\n",
    "b = int(input())\n",
    "c = math.sqrt(a ** 2 + b ** 2)\n",
    "h = a * b / c\n",
    "h = round(h, 2)\n",
    "print(h)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<br>\n",
    "\n",
    "## 3.最后一个单词"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "计算字符串最后一个单词的长度，单词以空格隔开。\n",
    "\n",
    "可以使用`s=str(input())`语句实现字符串s的输入：\n",
    "\n",
    "---\n",
    "\n",
    "**输入格式:**\n",
    "\n",
    "一行字符串，非空，长度小于5000。\n",
    "\n",
    "**输出格式：**\n",
    "\n",
    "整数N，最后一个单词的长度。\n",
    "\n",
    "---\n",
    "\n",
    "**输入样例：**\n",
    "\n",
    "```shell\n",
    "hello world\n",
    "```\n",
    "\n",
    "**输出样例：**\n",
    "\n",
    "```shell\n",
    "5\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdin",
     "output_type": "stream",
     "text": [
      "输入字符串s =  long time no see\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3\n"
     ]
    }
   ],
   "source": [
    "s = str(input())\n",
    "s = s.split(' ')\n",
    "length = len(s[-1])\n",
    "print(length)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<br>\n",
    "\n",
    "## 4.计算字符个数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "接受一个由字母和数字组成的字符串，和一个字符，然后输出输入的字符串中含有该字符的个数。不区分大小写。\n",
    "\n",
    "---\n",
    "\n",
    "**输入格式:**\n",
    "\n",
    "输入一个由字母和数字组成的字符串，和一个字符，以空格隔开。\n",
    "\n",
    "**输出格式：**\n",
    "\n",
    "输出输入的字符串中含有该字符的个数。\n",
    "\n",
    "----\n",
    "\n",
    "**输入样例：**\n",
    "\n",
    "```shell\n",
    "a1234bcdef a\n",
    "```\n",
    "**输出样例：**\n",
    "\n",
    "```shell\n",
    "1\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdin",
     "output_type": "stream",
     "text": [
      "输入字符串s =   a1234bcdef a\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1\n"
     ]
    }
   ],
   "source": [
    "s = str(input())\n",
    "char_num = s.count(s[-1]) - 1\n",
    "print(char_num)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**小结**\n",
    "* `.isalpha()` 判断是否为字母\n",
    "* `.isdigit()` 判断是否为数字\n",
    "* `.isalnum()` 判断是否为字母/数字\n",
    "\n",
    "汉字会被判定成字母"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<br>\n",
    "\n",
    "## 5.A+B问题"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "给出两个整数，输出他们的和\n",
    "\n",
    "---\n",
    "\n",
    "**输入格式:**\n",
    "\n",
    "两行，每行一个整数\n",
    "\n",
    "**输出格式：**\n",
    "\n",
    "输出一个数，即他们的和\n",
    "\n",
    "---\n",
    "\n",
    "**输入样例：**\n",
    "\n",
    "```\n",
    "1\n",
    "2\n",
    "```\n",
    "\n",
    "**输出样例：**\n",
    "\n",
    "```\n",
    "3\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdin",
     "output_type": "stream",
     "text": [
      "输入A =  3\n",
      "输入B =  4\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "7\n"
     ]
    }
   ],
   "source": [
    "a = int(input())\n",
    "b = int(input())\n",
    "c = int(a + b)\n",
    "print(c)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<br>\n",
    "\n",
    "## 6.圆的周长与面积"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "给出一个圆的半径，求出圆的周长和面积\n",
    "\n",
    "使用 `round(a,4)` 函数保留4位小数，规定pi=3.14159\n",
    "\n",
    "---\n",
    "\n",
    "**输入格式:**\n",
    "\n",
    "输入包含一个整数r，表示圆的半径\n",
    "\n",
    "**输出格式：**\n",
    "\n",
    "输出一行，包含2个数，分别是圆的周长、面积，用空格分隔开，数字保留小数点后4位\n",
    "\n",
    "---\n",
    "\n",
    "**输入样例：**\n",
    "\n",
    "```\n",
    "3\n",
    "```\n",
    "\n",
    "**输出样例：**\n",
    "\n",
    "```\n",
    "18.8495 28.2743\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdin",
     "output_type": "stream",
     "text": [
      "输入圆的半径r =  3\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "18.8495 28.2743\n"
     ]
    }
   ],
   "source": [
    "radius = int(input())\n",
    "PI = 3.14159\n",
    "l = 2 * PI * radius\n",
    "s = PI * radius ** 2\n",
    "\n",
    "l = round(l, 4)\n",
    "s = round(s, 4)\n",
    "print(l, s)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<br>\n",
    "\n",
    "## 7.三角形面积\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由三角形的三边长，求其面积。\n",
    "\n",
    "规定：输入的三条边一定能构成三角形，不用进行判定。\n",
    "\n",
    "提示：a, b, c小于1000，由三角形的三边a,b,c求面积可以用如下的公式：\n",
    "\n",
    "其中 $p=(a+b+c)/2$\n",
    "\n",
    "面积 $S=\\sqrt{p(p-a)(p-b)(p-c)}$\n",
    "\n",
    "请使用 `print('%.2f'%s)` 来保留小数\n",
    "\n",
    "---\n",
    "\n",
    "**输入格式:**\n",
    "\n",
    "三行，每行一个整数。\n",
    "\n",
    "**输出格式：**\n",
    "\n",
    "一个实数，保留两位小数。\n",
    "\n",
    "---\n",
    "\n",
    "**输入样例：**\n",
    "\n",
    "```\n",
    "3\n",
    "4\n",
    "5\n",
    "```\n",
    "\n",
    "**输出样例：**\n",
    "\n",
    "```\n",
    "6.00\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdin",
     "output_type": "stream",
     "text": [
      "输入a =  3\n",
      "输入b =  4\n",
      "输入c =  5\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "6.00\n"
     ]
    }
   ],
   "source": [
    "import math\n",
    "\n",
    "a = int(input())\n",
    "b = int(input())\n",
    "c = int(input())\n",
    "\n",
    "p = (a + b + c) / 2\n",
    "s = math.sqrt(p * (p - a) * (p - b) * (p - c))\n",
    "print('%.2f' % s)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<br>\n",
    "\n",
    "## 8.等差数列末项计算"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "给出一个等差数列的前两项a1，a2，求第n项是多少\n",
    "\n",
    "---\n",
    "\n",
    "**输入格式:**\n",
    "\n",
    "三行，包含三个整数a1，a2，n\n",
    "\n",
    "**输出格式：**\n",
    "\n",
    "一个整数，即第n项的值\n",
    "\n",
    "---\n",
    "\n",
    "**输入样例：**\n",
    "\n",
    "```\n",
    "1\n",
    "4\n",
    "100\n",
    "```\n",
    "\n",
    "**输出样例：**\n",
    "\n",
    "```\n",
    "298\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdin",
     "output_type": "stream",
     "text": [
      "输入首项a1 =  1\n",
      "输入第2项a2 =  4\n",
      "输入要求的第n项，n =  100\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "298\n"
     ]
    }
   ],
   "source": [
    "a1 = int(input())\n",
    "a2 = int(input())\n",
    "n = int(input())\n",
    "d = a2 - a1\n",
    "an = a1 + (n - 1) * d\n",
    "print(an)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}